$().ready(function () {

	maskJobModel.clear();
	var jobResult = $('#jobResult');
	validateRule();
	dataSource('TXT', jobResult);
	// 数据类型更改，获取脱敏源
	$('#dataType').change(function (event) {
		jobResult.empty();
		dataSource(this.value, jobResult);

	});
	secondStep();
	thirdStep();

});
// 获取脱敏规则，拼接成option字符串
// 通过验证后提交，获取脱敏规则
$.validator.setDefaults({
	submitHandler: function () {

	}
});

// 验证
function validateRule() {
	var icon = "<i class='fa fa-times-circle'></i> ";
	$("#signupForm").validate({
		rules: {
			name: {
				required: true
			}
		},
		messages: {
			name: {
				required: icon + "请输入姓名"
			}
		}
	})


}

// 第一步:获取数据源（类型，目标元素）
function dataSource(val, ele) {
	$.get(`/staticmask/mask/dataSource/${val}`, function (data) {
		$.each(data, function (index, el) {
			ele.append("<option value='" + el.id + "' data-createtime='"
			        + el.createtime +"'>" + el.name + "</option>");
		});
	})
}

// 第二步:获取表名称
function secondStep() {
	$("#secondStep").click(function () {
		$("#contentFir").hide();
		$("#contentThr").hide();
		$("#contentSec").show();

		var dataType = $('#dataType').val();
		var jobResult = $('#jobResult').val();
		
		$.getJSON(`/staticmask/mask/tableProperty/${dataType}/${jobResult}`, function (datalist) {
			$('#tablesInfo')
				.bootstrapTable({
					data: datalist,
					search: true,
					iconSize: 'outline',
					toolbar: '#exampleToolbar',
					striped: true, // 设置为true会有隔行变色效果
					dataType: "json", // 服务器返回的数据类型
					pagination: false, // 设置为true会在底部显示分页条
					showColumns: false, // 是否显示内容下拉框（选择显示的列）
					clickToSelect: true,
					escape: true,
					columns: [{
							checkbox: true
						},
						{
							field: 'name',
							title: '表名'
						},
						{
							field: 'comment',
							title: '表注释'
						}
					]
				});
		});
	});

}

// maskJobModel
var maskJobModel = (function() {
	var table = new Array();
	var obj = new Object();
	obj.getJson = function () {
		obj.category = $("#dataType").val();
		obj.dataSource = $('#jobResult').val();
		obj.table = table;
		// 获取表名称前设置数据源修改时间
		console.log($('#jobResult').find("option:selected").data("createtime"));
		obj.dataSourceLastChangeTime = $('#jobResult').find("option:selected").data("createtime");
		return JSON.stringify(obj);
	}
	obj.addTable = function (e) {
		for (var t of table) {
            console.info(t.tableName);
			if (t.tableName == e.tableName) {
				t.columnPropertyList = e.columnPropertyList;
				return;
			}
		}
		table.push(e);
	}
	obj.clear = function () {
		table = new Array();
	}
	return obj;
})();

// 第三步:设置脱敏规则
function thirdStep() {
	$("#thirdStep").click(function () {
		var rows = $("#tablesInfo").bootstrapTable('getSelections', function (row) {
			return row;
		});
		if (rows.length == 0) {
			parent.layer.alert("请至少选中一张表！");
			return false;
		}
		$('#contentFir').hide();
		$("#contentSec").hide();
		$("#contentThr").show();
		$.ajax({
			url: "/staticmask/maskRule/findAll",
			type: "get",
			success: function (json) {
				var opt = '<option value="-1" mask="0">不脱敏</option>';
				$.each(json, function (index, el) {
					// 因为是obj，要拼成字符串当做属性值，否则获取不到
					var elStr = JSON.stringify(el);
					opt += "<option value='" + el.maskName + "' mask='" + elStr + "'>" + el.maskName + "</option>"
				});
				$("#schemaTable").bootstrapTable({
					data: rows,
					iconSize: 'outline',
					toolbar: '#exampleToolbar',
					striped: true, // 设置为true会有隔行变色效果
					dataType: "json", // 服务器返回的数据类型
					pagination: false, // 设置为true会在底部显示分页条
					showColumns: false, // 是否显示内容下拉框（选择显示的列）
					escape: true,
					columns: [{
						field: 'name',
						title: '表名'
					}]
				}).on('click-row.bs.table', function (e, row, element) {
					$('.success').removeClass('success');
					$(element).addClass('success');
					loadColumn(row.name, opt);
				});
				$("#schemaTable tr:eq(1)").addClass('success');
				loadColumn(rows[0].name, opt);
			}
		});

	});
}

// 每次更改脱敏规则时修改请求数据
function saveTable() {
	var aTable = {};
	aTable.tableName = $('.success').children("td").text();
	aTable.columnPropertyList = new Array();
	$("#columnTable").children("tbody").children("tr").each(function (index, element) {
		var maskRule = $(element).find("option:selected").attr("mask");
		if (maskRule != 0) {
			aTable.columnPropertyList.push({"maskRuleDO":JSON.parse(maskRule)});
		}else{
			aTable.columnPropertyList.push({});
		}
	})
	maskJobModel.addTable(aTable);
}

// 第三步，根据表名获取列信息
function loadColumn(tableName, opt) {
	var dataType = $('#dataType').val();
	var jobResult = $('#jobResult').val();

	var url = `/staticmask/mask/columnProperty/${dataType}/${jobResult}`;
	url = url + "/" + tableName.replace(/\./g, "-");

	$.getJSON(url, function (result) {
		$("#columnTable").bootstrapTable({
			iconSize: 'outline',
			toolbar: '#exampleToolbar',
			striped: true, // 设置为true会有隔行变色效果
			dataType: "json", // 服务器返回的数据类型
			pagination: false, // 设置为true会在底部显示分页条
			showColumns: false, // 是否显示内容下拉框（选择显示的列）
			escape: true,
			columns: [{
					field: 'columnName',
					title: '字段名'
				},
				{
					field: 'columnDataType',
					title: '字段类型'
				},
				{
					field: 'columnComment',
					title: '字段注释'
				},
				{
					field: 'maskRuleDO',
					title: '脱敏规则',
					formatter: function (obj, row, ind) {
						obj = obj || {}
						var selectHtml = '<select id="make' + ind + '" onchange="saveTable()">' + opt +
							'</select>'
						return selectHtml
					}
				}
			]
		}).bootstrapTable('load', result);
	})
}

// 第四步：最后提交
function submitMsg() {
	$.ajax({
		cache: true,
		type: "POST",
		url: "/staticmask/mask/start-job",
		data: maskJobModel.getJson(),
		async: false,
		contentType: "application/json",
		error: function (request) {
			parent.layer.alert("Connection error");
		},
		success: function (data) {
			if (data.code == 0) {
				parent.layer.msg("操作成功");
				parent.reLoad();
				var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
				parent.layer.close(index);

			} else {
				parent.layer.alert(data.msg)
			}

		}
	});
}
